package com.example.cloudcity.servlet;

import com.example.cloudcity.utils.DataSourceUtils; // 导入数据源工具类
import jakarta.servlet.*; // 导入Servlet相关类
import jakarta.servlet.annotation.WebServlet; // 导入WebServlet注解，用于定义Servlet
import jakarta.servlet.http.*; // 导入HttpServlet相关类

import java.io.IOException; // 导入IOException类，用于处理输入输出异常
import java.io.OutputStream; // 导入OutputStream类，用于输出数据
import java.sql.Connection; // 导入Connection接口，用于数据库连接
import java.sql.PreparedStatement; // 导入PreparedStatement接口，用于执行预编译SQL语句
import java.sql.ResultSet; // 导入ResultSet接口，用于处理查询结果
import java.sql.SQLException; // 导入SQLException类，用于处理SQL异常

@WebServlet("/gameImage") // 定义Servlet的URL映射
public class GameImageServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String gameId = request.getParameter("id"); // 从请求中获取游戏ID

        try (Connection conn = DataSourceUtils.getConnection()) { // 获取数据库连接
            String sql = "SELECT image_data, image_type FROM games WHERE game_id = ?"; // SQL查询语句
            PreparedStatement pstmt = conn.prepareStatement(sql); // 准备SQL语句
            pstmt.setString(1, gameId); // 设置游戏ID参数

            ResultSet rs = pstmt.executeQuery(); // 执行查询
            if (rs.next()) { // 如果查询到结果
                byte[] imageData = rs.getBytes("image_data"); // 获取图像数据
                String imageType = rs.getString("image_type"); // 获取图像类型

                response.setContentType("image/" + imageType); // 设置响应内容类型为图像类型
                try (OutputStream out = response.getOutputStream()) { // 获取输出流
                    out.write(imageData); // 将图像数据写入输出流
                    out.flush(); // 刷新输出流
                }
            }
        } catch (SQLException e) { // 捕获SQL异常
            e.printStackTrace(); // 打印异常堆栈
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 处理POST请求的逻辑（如果需要的话）
    }
}
